/**
 * 阿里云 OSS 配置文件
 * 
 * 功能说明：
 * - 配置阿里云 OSS 存储服务的基本参数
 * - 定义文件上传的限制和规则
 * - 支持 CDN 加速配置
 * 
 * 安全提醒：
 * - 当前配置在前端暴露了 AccessKeySecret，仅用于开发测试
 * - 生产环境建议使用 STS 临时凭证或后端代理上传
 * - 确保 OSS Bucket 的访问权限设置正确
 */

export const OSS_CONFIG = {
  // ==================== 阿里云 OSS 基础配置 ====================
  region: 'oss-cn-beijing', // OSS 区域，例如：oss-cn-hangzhou, oss-cn-beijing, oss-cn-shanghai 等
  accessKeyId: 'LTAI5tBf2wkcnhbbf1hNVrp5', // 阿里云 AccessKeyId（用于身份验证）
  accessKeySecret: 'AYj4prAXXjry3XkpI6UpFJ7Ebgs5dQ', // 阿里云 AccessKeySecret（用于签名验证）
  bucket: 'zuomayi', // OSS 存储桶名称
  endpoint: 'https://oss-cn-beijing.aliyuncs.com', // OSS 服务端点（不包含 bucket 名称，SDK 会自动添加）
  
  // ==================== 文件上传限制配置 ====================
  maxFileSize: 10 * 1024 * 1024, // 单个文件最大大小：10MB（单位：字节）
  allowedTypes: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'], // 允许上传的文件 MIME 类型
  maxFiles: 9, // 单次最多上传文件数量
  
  // ==================== 文件存储路径配置 ====================
  uploadPath: 'consultation/', // 上传文件在 OSS 中的存储路径前缀
  
  // ==================== CDN 加速配置（可选） ====================
  cdnDomain: '', // 如果使用了 CDN 加速，在此配置 CDN 域名，文件访问将通过 CDN 加速
}

/**
 * 获取完整的文件访问 URL
 * 
 * 功能说明：
 * - 根据配置生成文件的完整访问地址
 * - 优先使用 CDN 域名（如果配置了）
 * - 否则使用 OSS 原生域名
 * 
 * @param fileName 文件名（包含路径）
 * @returns 完整的文件访问 URL
 */
export const getFileUrl = (fileName: string): string => {
  // 如果配置了 CDN 域名，优先使用 CDN 加速访问
  if (OSS_CONFIG.cdnDomain) {
    return `${OSS_CONFIG.cdnDomain}/${fileName}`
  }
  // 使用 OSS 原生域名访问
  return `https://${OSS_CONFIG.bucket}.${OSS_CONFIG.region}.aliyuncs.com/${fileName}`
}

/**
 * 生成唯一的文件名
 * 
 * 功能说明：
 * - 避免文件名冲突，生成唯一标识
 * - 使用时间戳 + 随机字符串确保唯一性
 * - 保持原始文件扩展名
 * - 添加配置的路径前缀
 * 
 * @param originalName 原始文件名
 * @returns 新的唯一文件名（包含路径前缀）
 */
export const generateFileName = (originalName: string): string => {
  const timestamp = Date.now() // 当前时间戳
  const random = Math.random().toString(36).substring(2, 15) // 随机字符串
  const extension = originalName.split('.').pop() // 获取文件扩展名
  return `${OSS_CONFIG.uploadPath}${timestamp}_${random}.${extension}`
}

/**
 * 验证文件类型是否允许上传
 * 
 * 功能说明：
 * - 检查文件的 MIME 类型是否在允许列表中
 * - 防止上传不支持的文件类型
 * - 提高安全性，避免恶意文件上传
 * 
 * @param file 要验证的文件对象
 * @returns 是否为允许的文件类型
 */
export const validateFileType = (file: File): boolean => {
  return OSS_CONFIG.allowedTypes.includes(file.type)
}

/**
 * 验证文件大小是否在允许范围内
 * 
 * 功能说明：
 * - 检查文件大小是否超过配置的限制
 * - 防止上传过大的文件
 * - 控制存储空间使用和上传时间
 * 
 * @param file 要验证的文件对象
 * @returns 文件大小是否在允许范围内
 */
export const validateFileSize = (file: File): boolean => {
  return file.size <= OSS_CONFIG.maxFileSize
}

